﻿#define  _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include<string.h>

//int main6()
//{
//	int i = 9;
//	float* f = (float*)&i;
//	printf("%d\n", i);
//	printf("%f\n", *f);
//
//	*f = 9.0;
//	printf("%d\n", i);
//	printf("%f\n", *f);
//	return 0;
//}
//
//
//struct s 
//{
//	char c1;
//	int i;
//	char c2;
//};
//
//int main5()
//{
//	struct s s = { 0 };
//	printf("%zd\n", sizeof(s));
//	return 0;
//}
//
//int main4()
//{
//	char a[1000];
//	int i;
//	for (i = 0; i < 1000; i++)
//	{
//		a[i] = -1 - i;
//	}
//	printf("%d", strlen(a));
//	return 0;
//}
//
//
//
//int main3()
//{
//	char a = -1;
//	signed char b = -1;
//	unsigned char c = -1;
//	printf("a=%d,b=%d,c=%d", a, b, c);
//	return 0;
//}
//
//int check()
//{
//	int i = 1;
//	char* p = (char*)&i;
//	return *p;
//}
//int main2()
//{
//	int ret = check();
//	if (ret == 1)
//		printf("小端\n");
//	else
//		printf("大端\n");
//	return 0;
//}



//结构体内存对齐

//#pragma pack(1)  //预处理指令
//struct s1 
//{
//	char c1;
//	int i;
//	char c2;
//};
//
//struct s5
//{
//	char c1;
//	char c2;
//	int i;
//};
//
//
////练习2
//struct S2
//{
//	char c1;
//	char c2;
//	int i;
//}s2;
//
//struct S3
//{
//	double d;
//	char c;
//	int i;
//};
//
////练习4-结构体嵌套问题
//struct S4
//{
//	char c1;
//	struct S3 s3;
//	double d;
//};
//
//#pragma pack()
//int main()
//{
//	//printf("%zd\n", sizeof(s)); 
//	//printf("%zd\n", sizeof(s2));
//	//printf("%d\n", sizeof(struct S3));
//	printf("%d\n", sizeof(struct s1));
//	printf("%d\n", sizeof(struct s5));
//
//
//	return 0;
//}


//位段式的结构：某个程序员不需要那么多空间，可以通过冒号加数字指定这个成员只占几个bite位的空间
//专门用来节省空间的。
struct A
{
	int _a : 2;  //表示_a只占两个bite位
	int _b : 5;  //表示_b只占5个bite位
	int _c : 10;
	int _d : 30;
}; //2+5+10+30=47 / 8 = 5..。。7 = 6
struct S
{
	char a : 3;
	char b : 4;
	char c : 5;
	char d : 4;
};

int main10()
{
	//printf("%d\n", sizeof(struct A));
	struct S s = { 0 };
	s.a = 10;
	s.b = 12;
	s.c = 3;
	s.d = 4;
	//空间是如何开辟的？
	return 0;
}


#include <stdio.h>  

struct PackedStruct {
	unsigned int type : 4;  // 4位类型字段  
	unsigned int : 4;       // 4位无名位段，用于填充  
	unsigned int count : 8; // 8位计数字段  
};

int main11() {
	struct PackedStruct packedData;
	packedData.type = 7;    // 设置类型字段为7  
	packedData.count = 255; // 设置计数字段为255  

	printf("type = %u\n", packedData.type);
	printf("count = %u\n", packedData.count);

	return 0;
}


struct stu
{
	char s1;
	int i;
	char s2;
};

int main()
{
	printf("%d\n",sizeof(struct stu));
	return 0;
}